import store from '@/store'
import axios from 'axios'
import { Message } from 'element-ui'
// import { MessageBox, Message } from 'element-ui'
// import store from '@/store'
// import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// request interceptor请求拦截器
service.interceptors.request.use(config => {
  // 超时的主动介入，后台没有设置token的超时，前端主动设置，如果有token才执行
  if (store.getters.token) {
    const time = localStorage.getItem('setTime')
    const now = Date.now()
    if (now - time >= 1000 * 60 * 60) {
      store.dispatch('user/loginOut')
      // 阻止执行下面的代码
      return Promise.reject(new Error('token超时'))
    }
  }
  const token = localStorage.getItem('token')
  // token存在才执行下面的步骤
  if (token) {
    config.headers.Authorization = 'Bearer ' + token
  }
  return config
})

// response interceptor
// 封装响应拦截器，为什么要封装，因为在这里捕捉到错误后，可以直接处理，形成阻塞不执行下面的代码
service.interceptors.response.use(res => {
  const { message, success } = res.data
  // 如果成功，代表用户名和密码都正确,传进来后一定要返回
  if (success) {
    console.log('完全正确')
    return res.data.data
  } else {
    console.log('数据错误')
    Message.error(message)
    // 也要return，return什么，错误信息，并要阻止后面正确代码的执行
    // Promise.reject(传入的参数)，在catch(err)中接收
    return Promise.reject(new Error(message))
  }
}, err => {
  console.dir(err)
  // 超时的被动介入  如果超时强制退出回登录页面,后台会返回10002
  if (err.response && err.response.data.code === 10002) {
    store.dispatch('user/loginOut')
  }
  Message.error(err.message)
  return Promise.reject(err)
})

export default service
